package com.xiaoyun;

import com.xiaoyun.handle.MyInvocationHandle;
import com.xiaoyun.service.SomeService;
import com.xiaoyun.service.impl.SomeServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.logging.Handler;
import java.util.logging.MemoryHandler;

/*OOP：面向对象编程
AOP：面向切面编程          就是动态代理的一种规范化
切面：给方法增加的功能，一般是非业务功能

* JDK动态代理必须有接口
*
* cglib动态代理 原理是通过继承实现的   子类继承父类的方法
* 要就类和方法都不能是final的*/

/*aspectJ实现了aop    spring集成了aspectJ,同时spring也实现了自己的aop*/
public class App {
    public static void main(String[] args) {
        SomeService target = new SomeServiceImpl();
        InvocationHandler handler = new MyInvocationHandle(target);

        SomeService service = (SomeService)Proxy.newProxyInstance(target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),handler);
        service.doOther();


    }
}
